﻿/*****************************************************************//**
 * @file   VAOneXMLAdaptorFESubSystemElementList.h
 * @brief  VAOne读写FE子系统单元列表适配器
 *
 * @author lilongyuan (lilongyuan@diso.cn)
 * @date   2025-01-14
 *********************************************************************/
#ifndef VAONEXMLADAPTORFESUBSYSTEMELEMENTLIST_H
#define VAONEXMLADAPTORFESUBSYSTEMELEMENTLIST_H

#include "FITKAbstractVAOneXMLAdaptor.h"

namespace Acoustics
{
    class FITKAbstractFESubSys;
}

namespace IO
{
    /**
     * @brief   VAOne读写FE子系统单元列表适配器
     * @author  lilongyuan (lilongyuan@diso.cn)
     * @date    2025-01-14
     */
    class FITKVAOneXMLIOAPI VAOneXMLAdaptorFESubSystemElementList : public FITKAbstractVAOneXMLAdaptor
    {
        FITKCLASS(IO, VAOneXMLAdaptorFESubSystemElementList);
    public:

        /**
         * @brief   构造函数
         * @author  lilongyuan (lilongyuan@diso.cn)
         * @date    2025-01-14
         */
        explicit VAOneXMLAdaptorFESubSystemElementList() = default;
        /**
         * @brief   析构函数
         * @author  lilongyuan (lilongyuan@diso.cn)
         * @date    2025-01-14
         */
        ~VAOneXMLAdaptorFESubSystemElementList() = default;
        /**
         * @brief   适配器读数据
         * @return  是否执行成功
         * @author  lilongyuan (lilongyuan@diso.cn)
         * @date    2025-01-14
         */
        bool adaptR() override;
        /**
         * @brief   适配器写数据
         * @return  是否执行成功
         * @author  lilongyuan (lilongyuan@diso.cn)
         * @date    2025-01-14
         */
        bool adaptW() override;

    private:
        /**
         * @brief     读取线形单元
         * @param[i]  node FESubSystemElementList子节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool readLine(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     读取三角形单元
         * @param[i]  node FESubSystemElementList子节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool readTriangle(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     读取四边形单元
         * @param[i]  node FESubSystemElementList子节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool readQuadrangle(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     读取四面体单元
         * @param[i]  node FESubSystemElementList子节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool readTetrahedron(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     读取楔体（类三棱柱）单元
         * @param[i]  node FESubSystemElementList子节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool readWedge(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     读取六面体单元
         * @param[i]  node FESubSystemElementList子节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool readHexahedron(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     读取多边形单元
         * @param[i]  node FESubSystemElementList子节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool readPolygon(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
        * @brief     写出线单元
        * @param[i]  node FESubSystemElementList节点，data FE子系统数据
        * @return    是否执行成功
        * @author    lilongyuan(lilongyuan@diso.cn)
        * @date      2025-01-15
        */
        bool writeLine(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     写出三角形单元
         * @param[i]  node FESubSystemElementList节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool writeTriangle(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     写出四边形单元
         * @param[i]  node FESubSystemElementList节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool writeQuadrangle(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     写出四面体单元
         * @param[i]  node FESubSystemElementList节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool writeTetrahedron(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     写出楔体（类三棱柱）单元
         * @param[i]  node FESubSystemElementList节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool writeWedge(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     写出六面体单元
         * @param[i]  node FESubSystemElementList节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool writeHexahedron(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
        /**
         * @brief     写出多边形单元
         * @param[i]  node FESubSystemElementList节点，data FE子系统数据
         * @return    是否执行成功
         * @author    lilongyuan (lilongyuan@diso.cn)
         * @date      2025-01-15
         */
        bool writePolygon(rapidxml::xml_node<char>* node, Acoustics::FITKAbstractFESubSys* data);
    };
    Register2FITKIOAdaptorFactory(VAOneXML, FESubSystemElementList, VAOneXMLAdaptorFESubSystemElementList)
}

#endif // VAONEXMLADAPTORFESUBSYSTEMELEMENTLIST_H

